const Company = require('../models/Company');
const User = require('../models/User');
const { Op } = require('sequelize');

// 获取所有公司（管理员）
exports.getAllCompanies = async (req, res) => {
  try {
    const { page = 1, limit = 10, status, industry, search } = req.query;
    const offset = (page - 1) * limit;
    const whereClause = {};

    if (status) whereClause.status = status;
    if (industry) whereClause.industry = industry;
    if (search) {
      whereClause[Op.or] = [
        { name: { [Op.like]: `%${search}%` } },
        { description: { [Op.like]: `%${search}%` } }
      ];
    }

    const { count, rows: companies } = await Company.findAndCountAll({
      where: whereClause,
      limit: parseInt(limit),
      offset: parseInt(offset),
      include: [{ model: User, attributes: ['id', 'username', 'email', 'role'] }]
    });

    res.status(200).json({
      total: count,
      pages: Math.ceil(count / limit),
      currentPage: parseInt(page),
      companies
    });
  } catch (error) {
    res.status(500).json({ message: '获取公司列表失败', error: error.message });
  }
};

// 获取单个公司详情
exports.getCompanyById = async (req, res) => {
  try {
    const company = await Company.findByPk(req.params.id, {
      include: [{ model: User, attributes: ['id', 'username', 'email'] }]
    });

    if (!company) {
      return res.status(404).json({ message: '公司不存在' });
    }

    res.status(200).json(company);
  } catch (error) {
    res.status(500).json({ message: '获取公司详情失败', error: error.message });
  }
};

// 获取当前用户的公司信息
exports.getMyCompany = async (req, res) => {
  try {
    const company = await Company.findOne({
      where: { userId: req.user.id }
    });

    if (!company) {
      return res.status(404).json({ message: '未找到公司信息' });
    }

    res.status(200).json(company);
  } catch (error) {
    res.status(500).json({ message: '获取公司信息失败', error: error.message });
  }
};

// 创建公司信息
exports.createCompany = async (req, res) => {
  try {
    // 检查是否已存在公司
    const existingCompany = await Company.findOne({
      where: { userId: req.user.id }
    });

    if (existingCompany) {
      return res.status(400).json({ message: '您已创建过公司信息' });
    }

    const company = await Company.create({
      ...req.body,
      userId: req.user.id
    });

    res.status(201).json({ message: '公司信息创建成功', company });
  } catch (error) {
    res.status(500).json({ message: '创建公司信息失败', error: error.message });
  }
};

// 更新公司信息
exports.updateCompany = async (req, res) => {
  try {
    const company = await Company.findOne({
      where: { id: req.params.id, userId: req.user.id }
    });

    if (!company) {
      return res.status(404).json({ message: '公司不存在或无权限' });
    }

    await company.update(req.body);
    res.status(200).json({ message: '公司信息更新成功', company });
  } catch (error) {
    res.status(500).json({ message: '更新公司信息失败', error: error.message });
  }
};

// 管理员审核公司
exports.approveCompany = async (req, res) => {
  try {
    const { status, remark } = req.body;
    if (!['approved', 'rejected'].includes(status)) {
      return res.status(400).json({ message: '状态必须是approved或rejected' });
    }

    const company = await Company.findByPk(req.params.id);
    if (!company) {
      return res.status(404).json({ message: '公司不存在' });
    }

    await company.update({ status, remark });
    res.status(200).json({ message: `公司${status === 'approved' ? '审核通过' : '审核拒绝'}`, company });
  } catch (error) {
    res.status(500).json({ message: '审核公司失败', error: error.message });
  }
};

// 删除公司
exports.deleteCompany = async (req, res) => {
  try {
    const company = await Company.findOne({
      where: { id: req.params.id, userId: req.user.id }
    });

    if (!company) {
      return res.status(404).json({ message: '公司不存在或无权限' });
    }

    await company.destroy();
    res.status(200).json({ message: '公司信息删除成功' });
  } catch (error) {
    res.status(500).json({ message: '删除公司信息失败', error: error.message });
  }
};

// 获取公司的职位列表
exports.getCompanyJobs = async (req, res) => {
  try {
    const company = await Company.findOne({
      where: { id: req.params.id },
      include: ['Jobs']
    });

    if (!company) {
      return res.status(404).json({ message: '公司不存在' });
    }

    res.status(200).json(company.Jobs);
  } catch (error) {
    res.status(500).json({ message: '获取公司职位失败', error: error.message });
  }
};